package view.actions;

import beans.GeneralTo;
import beans.ProductoTo;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import negocio.GeneralManager;
import negocio.GeneralManagerException;
import negocio.ProductoManager;
import negocio.ProductoManagerException;
import negocio.UsuarioManagerException;

import negocio.VentasManager;
import negocio.VentasManagerException;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import view.forms.verImagenForm;


public class VerImagenAction extends Action {
    public ActionForward execute(ActionMapping mapping, ActionForm form, 
                                 HttpServletRequest request, 
                                 HttpServletResponse response) throws IOException, 
                                                                      ServletException, 
                                                                      VentasManagerException,
                                                                      GeneralManagerException {
        VentasManager pmg;
        pmg = new VentasManager();
        HttpSession session  = request.getSession(false);

        verImagenForm objform;
        String pgnJSP = "pgnImagen";
        objform = (verImagenForm) form;
        String operacion = objform.getOperacion();
        String ccod_prod = objform.getCcod_prod();
        String cruc_prov = objform.getCruc_prov();
        int nCanVent = objform.getNcan_Vent();

        // ---------------
        if (operacion != null && operacion.equals("ingresar_cantidad")) {
            if (ccod_prod != null){
                // Para llenar el combox de categoria
                ProductoTo producto;
                try {
                    producto = pmg.getProducto(cruc_prov, ccod_prod);
                    producto.setNcan_Vent(nCanVent);
                    String cnom_prod = producto.getCnom_Prod();
                    String cdes_prod = producto.getCdes_Prod();
                    String cTip_Mone_Vent = producto.getCtip_Mone_Vent();
                    String cdes_Mone_Vent = producto.getCdes_Mone_Vent();
                    double npre_Vent = producto.getNpre_Vent();
                    // objform
                    objform.setCruc_prov(cruc_prov);
                    objform.setCcod_prod(ccod_prod);
                    objform.setCnom_prod(cnom_prod);
                    objform.setCdes_prod(cdes_prod);
                    objform.setcTip_Mone_Vent(cTip_Mone_Vent);
                    objform.setcDes_Mone_Vent(cdes_Mone_Vent);
                    objform.setNpre_Vent(npre_Vent);
                    objform.setNcan_Vent(nCanVent);
                    // request
                    request.setAttribute("cruc_prov",cruc_prov);
                    request.setAttribute("ccod_prod",ccod_prod);
                    request.setAttribute("cnom_prod",cnom_prod);
                    request.setAttribute("cdes_prod",cdes_prod);
                    request.setAttribute("cTip_Mone_Vent",cTip_Mone_Vent);
                    request.setAttribute("cDes_Mone_Vent",cdes_Mone_Vent);
                    request.setAttribute("npre_Vent",npre_Vent);
                    request.setAttribute("ncan_Vent",nCanVent);
                } catch (UsuarioManagerException ex) {
                    Logger.getLogger(VerImagenAction.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }

        // AGREGAR AL CARRITO
        if (operacion != null && operacion.equals("agregarcarrito")) {
            ArrayList oProductosCarrito = (ArrayList)session.getAttribute("productosCarrito");
            ArrayList listaProductos = (ArrayList)session.getAttribute("listaProductos");
            //
            if (oProductosCarrito==null) {
                oProductosCarrito = new ArrayList();
            }
            ProductoManager mgrProd = new ProductoManager();
            if (cruc_prov != null && ccod_prod != null) {
                    try {
                        ProductoTo oProd = mgrProd.getProducto(cruc_prov, ccod_prod);
                        if (oProd != null) {
                            oProd.setNcan_Vent(nCanVent);
                            oProductosCarrito.add(oProd);
                        }
                    } catch (ProductoManagerException ex) {
                        Logger.getLogger(BuscarProductoAction.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (UsuarioManagerException ex) {
                        Logger.getLogger(BuscarProductoAction.class.getName()).log(Level.SEVERE, null, ex);
                    }
            }
            // HALLAR EL IGV
            GeneralManager pmgGral = new GeneralManager();
            GeneralTo oGeneral = new GeneralTo();
            double nPorIGV = 0;
            try {
                oGeneral = pmgGral.getGeneral();
                nPorIGV = oGeneral.getnPor_IGV();
            } catch (GeneralManagerException ex) {
                Logger.getLogger(InicialAction.class.getName()).log(Level.SEVERE, null, ex);
            }

            int cantidad = oProductosCarrito.size();
            double subTot = 0;
            double monIGV = 0;
            double monTot = 0;
            for (Iterator it = oProductosCarrito.iterator(); it.hasNext();) {
		ProductoTo to = (ProductoTo) it.next();
                subTot = subTot + (to.getNpre_Vent() * to.getNcan_Vent());
            }
            monIGV = subTot * (nPorIGV/100);
            monTot = subTot + monIGV;
            //
            objform.setProductosSeleccionados(oProductosCarrito);
            objform.setOperacion("ejecutarbuscar");
            session.setAttribute("productosCarrito",oProductosCarrito);

            //
            request.setAttribute("operacion", "ejecutarbuscar" );
            request.setAttribute("numeroProductos", cantidad );
            request.setAttribute("subTotal", subTot );
            request.setAttribute("montoIGV", monIGV );
            request.setAttribute("montoTotal", monTot );
            request.setAttribute("listaProductos", listaProductos );
            pgnJSP = "pgnBuscar";
        }
        return mapping.findForward( pgnJSP );
    }
}
